﻿#ifndef __GNSS_MGR_H__
#define __GNSS_MGR_H__

#include"../DataBase/EvGnssSNData.hpp"
#include"../Base/Concurrency/SpinLock.hpp"
#include<unordered_map>
#include<string>
#include"rapidjson/document.h"

namespace SC_SUN
{


class MapApp;


class GnssManGR
{

protected:

    //环境服务对象
    MapApp& mApp;

    //文档对象
    rapidjson::Document mInfo;

    ///key值为SAT_SN，value为EvSatelliteData类型数据
    std::unordered_map<std::string, EvGnssSNData> mGNSSs;

    ///每个GNSS数据的切片数据，其中为json数组需要谁的再解析谁的这样速度会快很多
    std::unordered_map<std::string, rapidjson::GenericArray<false, rapidjson::Value>> mAllSliceGNSSInfos;

    ///互斥锁
    MMF::SpinLock mMutex;

public:

    GnssManGR(MapApp& app):mApp(app) {}
    ~GnssManGR() {}

    //加载GNSS数据
    int LoadData();

    ///添加卫星数据
    bool AddGNSS(const std::string& SatSN, const EvGnssSNData& sat);

    ///查找卫星
    bool FindGNSS(const std::string& SatSN);

    ///获取卫星
    EvGnssSNData* GetGNSS(const std::string& SatSN, uint32_t sliceIdx);

    ///删除卫星
    bool DeleteGNSS(const std::string& SatSN);

    ///更新数据
    bool UpdateGNSS(const std::string& SatSN, const EvGnssSNData& sat);

    //获取仿真时长
    void GetTimeAndStep(double& time, double& step);
};

}


#endif